const app = getApp();
var utils = require("../../utils/common.js")
var mydebounce = utils.debounce(500) //创建一个防抖函数

// 用于高德定位
var amapFile = require('../../libs/amap-wx.js');
var markersData = {
	latitude: '',//纬度
	longitude: '',//经度
	key: "4882707d22ed0133fd505e1d7d921179"//申请的高德地图key
};

// ******************************页面开始*********************************
Page({
	data: {
		sid              : 0,                              //补充信息后要跳转的问卷id
		type             : '',                      //用户类型 ：personal、company
		userContactInfo  : {},
		companySize      : ['10人以下', '10-50人', '50人以上'],
		companySizeSubmit: '10人以下',                        //要提交的公司规模
		
		companyList       : [],      //从后台加载到的公司列表
		companyName       : '',      //用于选择了现有公司名绑定到input的变量
		loadingCompanyList: false,   //是否正在加载，用于视觉表现
		hideComponeyList  : true,    //标记是否隐藏公司下拉菜单，因为使用的是hidden属性
		
		// 公司所属城市相关
		region            : [],   //用于省市区选择器所显示的地址，可定位后赋值
		scopeIdArray      : [],   //园区要发送的id映射数组，要提交的是id
		scopeNameArray    : [],   //园区选择器的中文显示数据
		submitAddrFullInfo: {},   //要提交省市区完整的信息对象
		submitFullAddr    : ''    //要保存到表中的完整地址串(省,市,区,园)，以逗号分隔壁

	},

	onLoad: function (options) {
		// 设置要跳转的问卷id,和用户信息补充类型：公司或个人
		this.setData({
			sid: options.sid,
			type: options.type
		})
		// 请求已经补充过的信息，设置变量的userContactInfo，只用于视图中的显示判断
		wx.request({
			url: `${app.globalData.server_request_baseUrl}/user_getUserContactInfo.php`,
			data: {
				openid: wx.getStorageSync('openid'),
				unionid: wx.getStorageSync('unionid')
			},
			header: { 'content-type': 'application/json' },
			method: 'GET',
			dataType: 'json',
			responseType: 'text',
			success: (res) => {
				this.setData({ userContactInfo: res.data.userContactInfo })
			},
			fail: () => { },
			complete: () => { }
		});
	},

	/*////////////////////////////////// 其它 事件/////////////////////////////////////////// */
	/*////////////////////////////////// 其它 事件/////////////////////////////////////////// */
	/*////////////////////////////////// 其它 事件/////////////////////////////////////////// */
	formSubmit(e) {
		console.log('form发生了submit事件，携带数据为：', e.detail.value)
		let isFormallWrited = true //标记是否全部填写,true方可提交

		/*
		let formKeyCnMap = {
			contact_name: '姓名没有填写',
			contact_tel: '电话没有填写',
			company: '公司名称没有填写'
		}
		表单验证是否全部填写
		Object.keys(e.detail.value).forEach(key => { 
			if (!e.detail.value[key]) {
				isFormallWrited = false //标记为没有全部填写
				utils.toast(formKeyCnMap[key]) //提示
			}
		})
		*/
		// 遍历有出现在视图中的表单
		Object.keys(e.detail.value).forEach(key => { 
			// 有出现姓名填写的时候 
			// 验证姓名
			if (key=='contact_name') {
				if (!/^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,10}$/gi.test(e.detail.value['contact_name'])) {
					isFormallWrited = false //标记为没有全部填写
					utils.toast('请填写真实姓名') //提示
					return
				}
			}
			// 有出现电话填写的时候 
			// 验证手机号
			if (key=='contact_tel') {
				if (!/\d{11}/gi.test(e.detail.value['contact_tel'])) {
					isFormallWrited = false //标记为没有全部填写
					utils.toast('电话格式不对') //提示
					return
				}
			}
		})

		// 验证公司名称
		if (!/^[\u4e00-\u9fa5\(\)（）]{5,}$/gi.test(e.detail.value['company'])) {
			isFormallWrited = false //标记为没有全部填写
			utils.toast('请正确填写公司名称,不能少于5字') //提示
			return
		}
		
		// 判断是否选择队公司所属行政区域
		if(!this.data.submitFullAddr) {
			isFormallWrited = false //标记为没有全部填写
			utils.toast('没有选择公司所属地区') //提示
			return
		}

		// return false;
		// 如果全部填写，就发送表单数据
		if(isFormallWrited){
			wx.request({
				url: `${app.globalData.server_request_baseUrl}/user_updateContactInfo.php`,
				data: {
					...{
						openid: wx.getStorageSync('openid'),
						unionid: wx.getStorageSync('unionid')
					},
					...e.detail.value,
					...this.data.submitAddrFullInfo,
					size:this.data.companySizeSubmit,
					submitFullAddr:this.data.submitFullAddr
				},
				header: {'Content-Type': 'application/x-www-form-urlencoded'},
				method: 'POST',
				dataType: 'json',
				responseType: 'text',
				success: (res) => {
					if (res.data.code == 0) {
						wx.showToast({ title: '补充资料成功！' })
						setTimeout(() => {
							wx.redirectTo({
								url: `/pages/questionnaire/questionnaire?sid=${this.data.sid}`
							});
						}, 1000);
					} else { 
						wx.showToast({ title: '补充资料失败！?' })
					}
				},
				fail: () => { wx.showToast({ title: '请求失败' })},
				complete: () => { }
			});
		}
	},


	// 输入公司名称的时候
	__inputCompany(event) {
		let keyword = event.detail.value
		this.setData({keyword})
		// this.selectCompany(keyword) // 即时自动查询
	},
	__tapSearchCompany(){
		this.selectCompany(this.data.keyword)
	},
	selectCompany(keywrod){
		let that = this
		// 2个字符以上才搜索公司
		if (keywrod.length >= 2 ) {
			mydebounce(
				() => {
					that.setData({ loadingCompanyList: true })
					utils.request({
						url: `${app.globalData.server_request_baseUrl}/user_selectCompany.php`,
						data: { company: keywrod},
						method: 'POST'
					}, res => {
						console.log(res.data)
						// 有数据才赋值,否则要清空
						res.data.companyList
							? that.setData({ companyList: res.data.companyList })
							: that.setData({ companyList: [] })
						//隐藏加载中
						that.setData({ loadingCompanyList: false })
					})
				}
			);
		}
	},


	// 直接选择匹配公司列表某一间公司
	// 即使选择现有公司，也要处理需要提交的完整省市区字符串
	__chooseCompany(e) {
		let fulladdrArray = [
			e.target.dataset.province,
			e.target.dataset.city,
			e.target.dataset.area
		]
		this.setData({
			hideComponeyList : true,
			companyName: e.target.dataset.company,
			region: fulladdrArray,
			['submitAddrFullInfo.scope_name']: e.target.dataset.scope,
			submitFullAddr: fulladdrArray.join(',')
		})
	},
	// 选择公司规模
	__bindCompanySizeChange(e) {
		console.log('改变了公司规模：', e.detail.value)
		this.setData({
			companySizeSubmit: this.data.companySize[e.detail.value]
		})
	},

	// 省市区选择器
	__bindRegionChange(e) {
		console.log('选择了省市区：', e.detail.value)
		this.setData({
			submitFullAddr: e.detail.value.join(','),
			region        : e.detail.value
		})
		// 请求后台，查询出所选区的自定义园区地标
		// 目前这里的策略是直接使用小程序选择器的省市区，查出对应的园区
		// 并从后台获取对应的省、市、区、编号，用于提交存入公司表
		wx.showLoading('加载园区中..')
		wx.request({
			url: `${app.globalData.server_request_baseUrl}/addr_getScope.php`,
			data: {addr:e.detail.value.join(',')},
			header: { 'content-type': 'application/json' },
			method: 'GET',
			dataType: 'json',
			responseType: 'text',
			success: (res) => {
				console.log(res.data.dataList);
				let scopeIdArray = [];
				let scopeNameArray = [];
				res.data.dataList.forEach(item=>{ 
					scopeIdArray.push(item.id); scopeNameArray.push(item.name) 
				})
				this.setData({ 
					scopeIdArray,
					scopeNameArray,
					['submitAddrFullInfo.province_name']: res.data.addrinfo.province_name,
					['submitAddrFullInfo.province_id']  : res.data.addrinfo.province_id,
					['submitAddrFullInfo.city_name']    : res.data.addrinfo.city_name,
					['submitAddrFullInfo.city_id']      : res.data.addrinfo.city_id,
					['submitAddrFullInfo.area_name']    : res.data.addrinfo.area_name,
					['submitAddrFullInfo.area_id']      : res.data.addrinfo.area_id,
					// 每次重新选择省市区，要清空之前选过空园数据
					['submitAddrFullInfo.scope_name']: '',
					['submitAddrFullInfo.scope_id']  : 0,
				})
				
			},
			fail: () => { },
			complete: () => {wx.hideLoading()}
		});
	},

	// 园区选择
	__bindScopeChange: function (e) {
		console.log('选择了园区：', e.detail.value)
		this.setData({ 
			submitFullAddr                   : this.data.submitFullAddr +','+ this.data.scopeNameArray[e.detail.value],
			['submitAddrFullInfo.scope_name']: this.data.scopeNameArray[e.detail.value],
			['submitAddrFullInfo.scope_id']  : this.data.scopeIdArray[e.detail.value],
		})
	},

	//定位
	__position() {
		var that = this;
		wx.getLocation({
			type: 'gcj02', //返回可以用于wx.openLocation的经纬度
			success: function (res) {
				var latitude = res.latitude//维度
				var longitude = res.longitude//经度
				console.log(res);
				that.loadCity(latitude, longitude);
			}
		})
	},

	//到高德换取地理位置
	loadCity: function (latitude, longitude) {
		var that = this;
		var myAmapFun = new amapFile.AMapWX({ key: markersData.key });
		myAmapFun.getRegeo({
			location: '' + longitude + ',' + latitude + '',//location的格式为'经度,纬度'
			success: function (data) {
				console.log(data);
				console.log(data[0].regeocodeData.addressComponent.city)
			},
			fail: function (info) { }
		})
	},

	// 表单重置
	formReset() { console.log('form发生了reset事件') },
	// 显示或隐藏公司下拉选择器
	__showCompanyList() { this.setData({ hideComponeyList : false }) },
	__hideCompanyList() { this.setData({ hideComponeyList : true }) }
})